package com.cq.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
*1、整个MyBatis-plus
*      1)、导入依赖
*      2）、配置
*           1、配置数据源;
 *              1)、导入数据库的驱动。mysql-connector-java
 *              2）、配置数据源 application-yml
*           2、配置MyBatis-Plus
 *           1)使用@MapperScan
 *           2)告诉MyBatis-Plus，sql映射文件位置 application-yml
 *
 * 2、逻辑删除
 *      1）配置全局的逻辑删除规则（省略）
 *      2）配置逻辑删除组件（省略）
 *      3）****实体类字段上加上@TableLogic注解
 *
 * 3、JSR303
 *      1）给Bean添加校验注解:都在该包下javax.validation.constraints，并定义自己的message提示
 *      2）开启校验功能，在需要校验的Controller的参数上添加注解@Valid
 *         效果：校验错误以后会有默认的响应
 *      3)给校验的bean后紧跟一个BindingResult，就可以获取到校验的结果
 *      4）分组校验
 *              1)@NotBlank(message = "品牌名必须提交",groups = {AddGroup.class,UpdateGroup.class})
 *                给校验注解标注什么情况需要进行校验
 *              2）开启校验功能，在需要校验的Controller的参数上添加注解@Validated({AddGroup.class})，注解指定要校验的groups
 *              3）默认没有指定分组的校验注解@NotBlank，在分组校验的情况下不生效，只会在@Validated失效【不加分组】
 *      5)自定义校验
 *          1）编写一个自定义的校验注解
 *          2) 编写一个自定义的校验器  ConstraintValidator
 *          3) 关联自定义的校验器和自定义的校验注解
 *              @Documented
 *              @Constraint(validatedBy = {ListValueConstraintValidator.class})
 *              @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
 *              @Retention(RUNTIME)
 *
 * 4、统一的异常处理 GulimallExceptionControllerAdvice(异常处理类) + BizCodeEnum(错误信息枚举)
 *
*
 */
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.cq.gulimall.product.dao")
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
